Android Customized Layout
Android Kotlin Layout Customized
First Step
Write the .xml file, implement your design
For the example we use RelativeLayout and call file the test.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:paddingTop="20dp"
        android:paddingBottom="20dp">
    <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:gravity="start"
            android:text="@string/empty"/>
</RelativeLayout>
## Second Step ### Write the .kt file, for example call the `TestLayout.kt` ```kotlin
class TestLayout(context: Context, attrs: AttributeSet) 
    : RelativeLayout(context, attrs) {
    init {
        inflate(context, R.layout.test, this)
    }
}
<br>
### Now, you can use this layout in the other xml file
```kotlin
    <your_package_name.TestLayout
            android:id="@+id/recentActivity"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    </your_package_name.TestLayout>
### Looking Good ### But can not set title with TestLayout container TextView in other xml file # π«π«π«π«π«π«
## Third Step
Create attrs.xml in the res/values
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="TestLayout">
            <attr name="title" format="string" />
        </declare-styleable>
    </resources>
Change TestLayout.kt
    class TestLayout(context: Context, attrs: AttributeSet) 
        : RelativeLayout(context, attrs) {
        init {
            inflate(context, R.layout.test, this)
            // add next three lines
            val attributes = context.obtainStyledAttributes(attrs, R.styleable.TestLayout)
            textView.text = attributes.getString(R.styleable.TestLayout_title)
            attributes.recycle()
        }
    }
Now, you can set textView title in other xml file, Like this
    <your_package_name.TestLayout
            android:id="@+id/recentActivity"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:title="@string/good_job">
    </your_package_name.TestLayout>
## Finish Done, No No No
### When use more more Customized Layout ### Setup more more the attr in the `attrs.xml` ### You will find, like can not setup the same name attr in the `attrs.xml` # π±π±π±π±π±π± ### It's fine, this is simple fix ### You can change your `attr.xml` like this ```kotlin
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="title" format="string" />
    
    <declare-styleable name="TestLayout">
        <attr name="title"/>
    </declare-styleable>
</resources>
## <a href="https://stackoverflow.com/a/4464966" target="_blank">Reference Link</a>